<?php
class VfsTreeNodeDAO implements IDAO
{
/**
	 * Obtiene un árbol (o subárbol) según su id.
	 * @param integer $id El id de la raíz del árbol a obtener.
	 * @return VfsTreeNode El nodo (o árbol) obtenido.
	 */
	static function getTreeById($id, $level = 0)
	{
		require_once "classes/persistence/DBManager.php";
		$db = DBManager::getConnection();
		
		$dbNode = $db->fetchAll("SELECT * FROM NODOS_VFS WHERE ID = $id");
		// Como la búsqueda es por id, va a devolver un solo resultado.
		$element = $dbNode[0];
		$name = $element["NODO_VFS_NOMBRE"];
		
		$dbSiblings = $db->fetchAll("SELECT ID FROM NODOS_VFS WHERE NODO_VFS_PADRE_FK = $id");
		$siblingsIds = LogicTreeNodeDAO::extractIds($dbSiblings);
		$siblings = array();
		$i = 0;
		// Defino el nivel de todos los hijos de este nodo.
		$newLevel = $level + 1;
		foreach($siblingsIds as $siblingId){
			$siblings[$i] = VfsTreeNodeDAO::getTreeById($siblingId, $newLevel);
			$i++;
		}
		require_once "classes/model/LogicTreeNode.php";
		
		$hostedFiles = VfsTreeNodeDAO::getFilesForFolder($id);
		$node = new VfsTreeNode($name, $siblings, $level, $hostedFiles, $id);
		
		$db->closeConnection();
		return $node;
	}
	
	/**
	 * Obtiene todos los archivos del VFS cuyo padre es el correspondiente a $id.
	 * @param unknown_type $id
	 */
	static function getFilesForFolder($idPadre)
	{
		$db = DBManager::getConnection();
		
		$dbNode = $db->fetchAll("SELECT * FROM ARCHIVOS WHERE ID = $");
		
		
		$db->closeConnection();
		
	}
	
	static function getFileByPath($path)
	{
		// Obtengo todo el árbol.
		$tree = VfsTreeNodeDAO::getTreeById(0);
		$parsedPath = split("/", $path); //TODO: Ver si esto funciona
		$fileName = array_pop($parsedPath);
		// Si el pop no quita el elemento del array, hacer $parsedPath = array_pad($parsedPath, count($parsedPath) - 1);
		$currentNode = $tree;
		foreach($parsedPath as $part){
			$contains = false;
			foreach($siblings as $sibling){
				if($sibling->getName() == $part){
					// Si no lo encuentro $contains queda en false y doy error porque no está el directorio.
					$contains = true;
					$currentNode = $sibling;
				}
			}
			if(!$contains){
				throw new Exception("Ruta incorrecta.");
			}
		}
		$hostedFiles = $currentNode->getHostedFiles();
		foreach($hostedFiles as $file){
			if($file->getName() == $fileName){
				return $file;
			}
		}
		// Si no retornó, es porque no encontró el archihvo.
		throw new Exception("Archivo inexistente.");
	}
}